import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.*;
import javax.swing.border.BevelBorder;

/**
 * Fenêtre d'initialisation de la production
 * 
 * @author H4201
 * 
 */
public class FenetreInit extends JDialog implements ActionListener {

	/**
	 * ID de la fenêtre
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Bouton de validation
	 */
	private JButton bValider;

	/**
	 * Champs de texte à remplir
	 */
	private JTextField dimA, dimB, nbPieceCartonA, nbPieceCartonB, seuilA,
			seuilB, nbCartonPaletteA, nbCartonPaletteB, nbPalettesA,
			nbPalettesB, numLotA, numLotB, codeOperateur;
	private JRadioButton radioButtonA, radioButtonB;

	/**
	 * Boutons de sélection du type de pièce à produire en premier
	 */
	private ButtonGroup radioButtons;

	/**
	 * Controleur principal
	 */
	private ControleurFenetrePrincipale ctrl;

	/**
	 * Constructeur de FenetreInit. Crée et affiche la fenêtre.
	 * 
	 * @param ctrl2
	 *            Controleur principal
	 */
	public FenetreInit(ControleurFenetrePrincipale ctrl2) {
		ctrl = ctrl2;

		setTitle("Initialisation");
		setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
		this.setModal(true);

		JPanel pan = new JPanel(new BorderLayout());
		JPanel infos = new JPanel(new BorderLayout());

		JPanel infosAG = new JPanel(new GridLayout(6, 1));
		JPanel infosAD = new JPanel(new GridLayout(6, 1));
		JPanel infosA = new JPanel(new BorderLayout());

		JPanel infosBG = new JPanel(new GridLayout(6, 1));
		JPanel infosBD = new JPanel(new GridLayout(6, 1));
		JPanel infosB = new JPanel(new BorderLayout());

		infosAG.add(new JLabel("Dimension de A :"));
		infosAG.add(new JLabel("Nombre de pièces/carton pour A :"));
		infosAG.add(new JLabel("Seuil pour A :"));
		infosAG.add(new JLabel("Nombre de cartons/palette pour A :"));
		infosAG.add(new JLabel("Nombres de palettes pour A :"));
		infosAG.add(new JLabel("Numéro de lot de A :"));

		infosAD.setPreferredSize(new Dimension(50, 20));

		dimA = new JTextField(10);
		dimA.setBorder(new javax.swing.border.BevelBorder(BevelBorder.RAISED,
				Color.GRAY, Color.DARK_GRAY));
		infosAD.add(dimA);
		nbPieceCartonA = new JTextField(5);
		nbPieceCartonA.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosAD.add(nbPieceCartonA);
		seuilA = new JTextField(15);
		seuilA.setBorder(new javax.swing.border.BevelBorder(BevelBorder.RAISED,
				Color.GRAY, Color.DARK_GRAY));
		infosAD.add(seuilA);
		nbCartonPaletteA = new JTextField();
		nbCartonPaletteA.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosAD.add(nbCartonPaletteA);
		nbPalettesA = new JTextField();
		nbPalettesA.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosAD.add(nbPalettesA);
		numLotA = new JTextField();
		numLotA.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosAD.add(numLotA);

		infosA.add(infosAG, BorderLayout.WEST);
		infosA.add(infosAD, BorderLayout.EAST);

		infosBG.add(new JLabel("Dimension de B :"));
		infosBG.add(new JLabel("Nombre de pièces/carton pour B :"));
		infosBG.add(new JLabel("Seuil pour B :"));
		infosBG.add(new JLabel("Nombre de cartons/palette pour B :"));
		infosBG.add(new JLabel("Nombres de palettes pour B :"));
		infosBG.add(new JLabel("Numéro de lot de B :"));

		infosBD.setPreferredSize(new Dimension(50, 20));

		dimB = new JTextField(10);
		dimB.setBorder(new javax.swing.border.BevelBorder(BevelBorder.RAISED,
				Color.GRAY, Color.DARK_GRAY));
		infosBD.add(dimB);
		nbPieceCartonB = new JTextField(5);
		nbPieceCartonB.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosBD.add(nbPieceCartonB);
		seuilB = new JTextField(15);
		seuilB.setBorder(new javax.swing.border.BevelBorder(BevelBorder.RAISED,
				Color.GRAY, Color.DARK_GRAY));
		infosBD.add(seuilB);
		nbCartonPaletteB = new JTextField();
		nbCartonPaletteB.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosBD.add(nbCartonPaletteB);
		nbPalettesB = new JTextField();
		nbPalettesB.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosBD.add(nbPalettesB);
		numLotB = new JTextField();
		numLotB.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		infosBD.add(numLotB);

		infosB.add(infosBG, BorderLayout.WEST);
		infosB.add(infosBD, BorderLayout.EAST);

		infos.add(infosA, BorderLayout.WEST);
		infos.add(infosB, BorderLayout.EAST);

		pan.add(infos, BorderLayout.NORTH);

		JPanel panBas = new JPanel();

		panBas.add(new JLabel("Code opérateur :"));
		codeOperateur = new JTextField(5);
		codeOperateur.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		panBas.add(codeOperateur);

		radioButtonA = new JRadioButton("Commencer par A");
		radioButtonA.setMnemonic(KeyEvent.VK_A);
		radioButtonA.setActionCommand("Commencer par A");
		radioButtonA.setSelected(true);
		radioButtonB = new JRadioButton("Commencer par B");
		radioButtonB.setMnemonic(KeyEvent.VK_B);
		radioButtonB.setActionCommand("Commencer par B");
		radioButtons = new ButtonGroup();
		radioButtons.add(radioButtonA);
		radioButtons.add(radioButtonB);
		panBas.add(radioButtonA);
		panBas.add(radioButtonB);

		bValider = new JButton("Valider");
		bValider.addActionListener(this);
		bValider.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED));
		bValider.setPreferredSize(new Dimension(65, 30));
		panBas.add(bValider);

		pan.add(panBas, BorderLayout.SOUTH);

		pan.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createEmptyBorder(8, 8, 8, 8), pan.getBorder()));

		setContentPane(pan);
		pack();
		setMinimumSize(getSize());
		setLocationRelativeTo(null);
		setVisible(true);
	}

	/**
	 * Envoie le message d'initialisation à Linux si les champs sont
	 * correctement renseignés, affiche une fenêtre d'erreur sinon.
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		try {
			if (Integer.parseInt(dimA.getText()) >= 0
					&& Integer.parseInt(dimB.getText()) >= 0
					&& Integer.parseInt(nbPieceCartonA.getText()) >= 0
					&& Integer.parseInt(nbPieceCartonB.getText()) >= 0
					&& Integer.parseInt(seuilA.getText()) >= 0
					&& Integer.parseInt(seuilB.getText()) >= 0
					&& Integer.parseInt(nbCartonPaletteA.getText()) >= 0
					&& Integer.parseInt(nbCartonPaletteB.getText()) >= 0
					&& Integer.parseInt(nbPalettesA.getText()) >= 0
					&& Integer.parseInt(nbPalettesB.getText()) >= 0
					&& Integer.parseInt(numLotA.getText()) >= 0
					&& Integer.parseInt(numLotB.getText()) >= 0
					&& Integer.parseInt(codeOperateur.getText()) >= 0) {
				ctrl.envoi("101 " + nbPalettesA.getText() + " "
						+ nbCartonPaletteA.getText() + " "
						+ nbPieceCartonA.getText() + " " + numLotA.getText()
						+ " " + dimA.getText() + " " + seuilA.getText() + " "
						+ nbPalettesB.getText() + " "
						+ nbCartonPaletteB.getText() + " "
						+ nbPieceCartonB.getText() + " " + numLotB.getText()
						+ " " + dimB.getText() + " " + seuilB.getText() + " "
						+ codeOperateur.getText());
				ctrl.setPremierType(getRadioButtons());
				dispose();
			} else {
				throw new Exception();
			}
		} catch (Exception e2) {
			JOptionPane
					.showMessageDialog(
							null,
							"Merci de remplir tous les champs avec des valeurs entières positives",
							"Erreur saisie", JOptionPane.OK_OPTION);
		}
	}

	/**
	 * Retourne "0" ou "1" suivant si l'utilisateur a demandé de commencer la
	 * production par des pièces de type A ou B
	 * 
	 * @return "0" pour A, "1" pour B
	 */
	public String getRadioButtons() {
		if (radioButtonA.isSelected()) {
			return "0";
		} else if (radioButtonB.isSelected()) {
			return "1";
		} else {
			return "-1";
		}
	}

}
